// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function() {
  var mode = CodeMirror.getMode({ indentUnit: 2 }, 'text/x-msgenny');
  function MT(name) {
    test.mode(name, mode, Array.prototype.slice.call(arguments, 1), 'msgenny');
  }

  MT(
    'comments',
    '[comment // a single line comment]',
    '[comment # another  single line comment /* and */ ignored here]',
    '[comment /* A multi-line comment even though it contains]',
    '[comment msc keywords and "quoted text"*/]',
  );

  MT(
    'strings',
    '[string "// a string"]',
    '[string "a string running over]',
    '[string two lines"]',
    '[string "with \\"escaped quote"]',
  );

  MT(
    "xù/ msgenny keywords classify as 'keyword'",
    '[keyword watermark]',
    '[keyword alt]',
    '[keyword loop]',
    '[keyword opt]',
    '[keyword ref]',
    '[keyword else]',
    '[keyword break]',
    '[keyword par]',
    '[keyword seq]',
    '[keyword assert]',
  );

  MT(
    "xù/ msgenny constants classify as 'variable'",
    '[variable auto]',
    '[variable true]',
    '[variable false]',
    '[variable on]',
    '[variable off]',
  );

  MT(
    'mscgen options classify as keyword',
    '[keyword hscale]',
    '[keyword width]',
    '[keyword arcgradient]',
    '[keyword wordwraparcs]',
  );

  MT(
    'mscgen arcs classify as keyword',
    '[keyword note]',
    '[keyword abox]',
    '[keyword rbox]',
    '[keyword box]',
    '[keyword |||...---]',
    '[keyword ..--==::]',
    '[keyword ->]',
    '[keyword <-]',
    '[keyword <->]',
    '[keyword =>]',
    '[keyword <=]',
    '[keyword <=>]',
    '[keyword =>>]',
    '[keyword <<=]',
    '[keyword <<=>>]',
    '[keyword >>]',
    '[keyword <<]',
    '[keyword <<>>]',
    '[keyword -x]',
    '[keyword x-]',
    '[keyword -X]',
    '[keyword X-]',
    '[keyword :>]',
    '[keyword <:]',
    '[keyword <:>]',
  );

  MT(
    'within an attribute list, mscgen/ xù attributes classify as base',
    '[base [[label]',
    '[base idurl id url]',
    '[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]',
    '[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]',
    '[base arcskip]]]',
  );

  MT(
    'outside an attribute list, mscgen/ xù attributes classify as base',
    '[base label]',
    '[base idurl id url]',
    '[base linecolor linecolour textcolor textcolour textbgcolor textbgcolour]',
    '[base arclinecolor arclinecolour arctextcolor arctextcolour arctextbgcolor arctextbgcolour]',
    '[base arcskip]',
  );

  MT(
    'a typical program',
    '[comment # typical msgenny program]',
    '[keyword wordwraparcs][operator =][variable true][base , ][keyword hscale][operator =][string "0.8"][base , ][keyword arcgradient][operator =][base 30;]',
    '[base   a : ][string "Entity A"][base ,]',
    '[base   b : Entity B,]',
    '[base   c : Entity C;]',
    '[base   a ][keyword =>>][base  b: ][string "Hello entity B"][base ;]',
    '[base   a ][keyword alt][base  c][bracket {]',
    '[base     a ][keyword <<][base  b: ][string "Here\'s an answer dude!"][base ;]',
    '[keyword ---][base : ][string "sorry, won\'t march - comm glitch"]',
    '[base     a ][keyword x-][base  b: ][string "Here\'s an answer dude! (won\'t arrive...)"][base ;]',
    '[bracket }]',
    '[base   c ][keyword :>][base  *: What about me?;]',
  );
})();
